Modern computer systems are frequently implemented as collections of virtual computer systems operating collectively on one or more host computer systems. The virtual computer systems may utilize resources of the host computer systems such as processors, memory, network interfaces, and storage services. When the resources of a particular host computer system become scarce due to, for example, overutilization by client virtual computer systems, it may become necessary to move a virtual computer system to a different host computer system to avoid reduced system performance, increased system outages or failures, and a degraded user experience.
One approach to the problem of moving or migrating a virtual computer system to a different host computer system is to halt the virtual computer system, copy the memory and/or the system state of the virtual computer system to the different host computer system, and then restart the virtual computer system. However, in the case of a large or complicated virtual computer system, this migration process can take a significant amount of time, and the ability of a user to interact with the virtual computer system during that time period may be eliminated or at least severely restricted. Additionally, some system resources, such as attached storage and network connections may be volatile, introducing the possibility that the migrated virtual computer system may differ significantly from the original virtual computer system, further introducing operational issues.